package com.browsesoft.adapter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.browsesoft.Tools;
import com.browsesoft.user.User;

/**
 * 主页面上显示七内的日程安排
 */
public class CalendarOnMainPage extends CalendarTableModel {
	static private Logger logger = null;
	static {
		try {
			logger = Logger.getLogger("CalendarOnMainPage");
			logger.addHandler(new FileHandler(Tools.getAbsolutePath()
					+ "/logs/CalendarOnMainPage%u.html"));
			logger.setUseParentHandlers(false);
		} catch (SecurityException ex) {
		} catch (IOException ex) {
		}
	}

	/**
	 * 空构造
	 */
	public CalendarOnMainPage() throws Exception {
		super();
	}

	/**
	 * 设置传递的参数
	 * 
	 * @param request
	 */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		User user = (User) request.getSession().getAttribute("loginUser");
		String userid = user.getID();
		// 得到条件
		Hashtable ht = new Hashtable();
		// 添加用户id
		ht.put("userid", userid);
		// 得到符合条件的实体
		LinkedList allCalendars = CalendarTools.FindCalendarsByAttr(ht);
		// 日历对象
		java.util.Calendar calendar = new java.util.GregorianCalendar();
		// 取得当前时间
		Date now = new Date();
		// 设置日期的时间
		calendar.setTime(now);
		// 向前推3天
		calendar.add(Calendar.DATE, -3);
		// 当前时间串
		String startDate = this.getFormatDate(calendar.getTime());
		// 得到七天后的日期
		calendar.add(Calendar.DATE, 6);
		// 得到七天后的日期字符串
		String endDate = this.getFormatDate(calendar.getTime());
		// 临时对象
		CalendarFormModel tempCalendar;
		String tempDate;
		// 把自己中的所有对象清除
		this.calendars.clear();
		long time = System.currentTimeMillis();
		// 取得符合条件的日程安排
		for (int i = 0; i < allCalendars.size(); i++) {
			tempCalendar = (CalendarFormModel) allCalendars.get(i);
			// 得到条件字符串
			tempDate = (String) tempCalendar.getAttributes().get("parentid");
			// 如果在七天内
			if (tempDate.compareTo(startDate) >= 0
					&& endDate.compareTo(tempDate) >= 0) {
				// 把该对象添加到日程列表中
				this.calendars.add(tempCalendar);
			}
		}
		// 打印取得符合条件的日程安排的时间
		long st = System.currentTimeMillis() - time;
		time = System.currentTimeMillis();
		if (st > 100) {
			logger.log(Level.INFO, "取得符合条件的日程安排的时间:" + st);
		}
		// 按时间顺序排序
		this.calendars = this.compositor(this.calendars, "parentid",
				"starthour");
		// 打印按时间顺序排序的时间
		st = System.currentTimeMillis() - time;
		time = System.currentTimeMillis();
		if (st > 100) {
			logger.log(Level.INFO, "按时间顺序排序的时间:" + st);
		}
	}

	/**
	 * 得到一个日期的固定格式的字符串
	 */
	public String getFormatDate(Date date) {
		// 按固定格式取得时间字符串的对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		// 返回固定格式的时间
		String time = sdf.format(date);
		// 用于父id的月份值比真实值小1，且后有分号
		time = String.valueOf(Integer.parseInt(time) - 100) + ";";
		return time;
	}
}